package com.wuzf.navigation_test.ui.home;

import androidx.annotation.NonNull;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import androidx.paging.DataSource;
import androidx.paging.ItemKeyedDataSource;

import com.wuzf.libnetwork.ApiService;
import com.wuzf.libnetwork.JsonCallBack;
import com.wuzf.libnetwork.Request;
import com.wuzf.libnetwork.ResultResponse;
import com.wuzf.navigation_test.model.Feed;
import com.wuzf.navigation_test.ui.AbsViewModel;

import org.jetbrains.annotations.NotNull;

import java.util.Collections;
import java.util.List;

public class HomeViewModel extends AbsViewModel<Feed> {


    @Override
    public DataSource createDataSource() {
        return createItemKeyedDataSource();
    }

    private void loadData(int key, ItemKeyedDataSource.LoadCallback<Feed> callback) {
        // 在这里加载数据
        Request request = ApiService.getRequest("/feeds/queryHotFeedsList")
                .addParams("feedType", null)
                .addParams("feedId", key)
                .addParams("pageCount", 10)
                .addParams("userId", 0);

        // 这里忽略缓存带来的影响，直接网络请求
        ResultResponse<Feed> response = request.execute();
        System.out.println("1");
        // List<Feed> resData = response.getBody() == null ? Collections.emptyList() : response.getBody();
        // callback.onResult(resData);

        // 根据Key值来判断是否需要显示空页面
//        if (key > 0) {
//            // 通过liveData发送数据，告诉UI层，是否应该主动关闭上拉加载分页的动画。
//            getBoundaryLiveData().postValue(resData.size() > 0);
//        }
    }

    /**
     * 有多种类型的DataSource
     * 在这个项目里运用到的是ItemKeyedDataSource
     *
     * @return
     */
    ItemKeyedDataSource<Integer, Feed> createItemKeyedDataSource() {
        return new ItemKeyedDataSource<Integer, Feed>() {
            @Override
            public void loadInitial(@NonNull @NotNull LoadInitialParams<Integer> params, @NonNull @NotNull LoadInitialCallback<Feed> callback) {
                // 初始加载数据的时候
                loadData(0, callback);
            }

            @Override
            public void loadAfter(@NonNull @NotNull LoadParams<Integer> params, @NonNull @NotNull LoadCallback<Feed> callback) {
                // 第一个之后加载数据的时候
                loadData(params.key, callback);
            }

            @Override
            public void loadBefore(@NonNull @NotNull LoadParams<Integer> params, @NonNull @NotNull LoadCallback<Feed> callback) {
                // 向上加载的时候
            }

            @NonNull
            @NotNull
            @Override
            public Integer getKey(@NonNull @NotNull Feed item) {
                // 获取key值
                return null;
            }
        };
    }
}